package com.telecom.service;

import com.telecom.common.convention.result.PageDTO;
import com.telecom.pojo.dto.admin.meal.AddMealDTO;
import com.telecom.pojo.dto.admin.meal.ModifyMealDTO;
import com.telecom.pojo.dto.admin.meal.AdminMealPageQueryRequestDTO;
import com.telecom.pojo.dto.user.meal.UserMealPageQueryRequestDTO;
import com.telecom.pojo.vo.admin.setmeal.AdminMealDetailVO;
import com.telecom.pojo.vo.admin.setmeal.MealPageVO;
import com.telecom.pojo.vo.user.meal.MealItemVO;
import com.telecom.pojo.vo.user.meal.UserMealDetailVO;
import jakarta.validation.Valid;
import jakarta.validation.constraints.Positive;

import java.util.List;

/**
 * 餐品服务接口
 */
public interface MealService {
    
    /**
     * 新增餐品
     * 
     * @param addMealDTO 餐品信息
     */
    void addMeal(AddMealDTO addMealDTO);
    
    /**
     * 批量删除餐品
     * 
     * @param ids 餐品ID列表
     */
    void deleteMeals(List<Long> ids);
    
    /**
     * 修改餐品
     * 
     * @param modifyMealDTO 餐品信息
     */
    void updateMeal(ModifyMealDTO modifyMealDTO);
    
    /**
     * 根据ID查询餐品详情
     * 
     * @param id 餐品ID
     * @return 餐品详情
     */
    AdminMealDetailVO getMealById(Long id);
    
    /**
     * 分页查询餐品
     * 
     * @param queryRequest 查询条件
     * @return 分页结果
     */
    PageDTO<MealPageVO> page(AdminMealPageQueryRequestDTO queryRequest);
    
    /**
     * 更新餐品状态
     * 
     * @param id 餐品ID
     * @param status 状态（1:起售，0:停售）
     */
    void updateStatus(Long id, Boolean status);

    /**
     * 用户端套餐分页查询
     * @param queryRequest
     * @return
     */
    PageDTO<MealItemVO> userPage(@Valid UserMealPageQueryRequestDTO queryRequest);

    /**
     * 用户端根据套餐id查询餐品详情
     * @param id
     * @return
     */
    UserMealDetailVO userGetMealDetailById(@Positive(message = "套餐ID必须为正数") Long id);
}